
#ifndef __SOCK_INET_TCP_HXX__
#define __SOCK_INET_TCP_HXX__

////////////////////////////////////////////////////////////////////////////////

#include "sock-inet.hxx"
#include "stream.hpp"

#include <stdexcept>

////////////////////////////////////////////////////////////////////////////////

class sock_inet_tcp : public sock_inet, public iostream
{
public:
//    sock_inet_tcp& operator>>(const timeout& t);
//    std::string recv();
//    void send(const std::string& s);

    sock_inet_tcp(sock_inet_tcp&&);
    virtual ~sock_inet_tcp();

    address get_remote() const;

    virtual FILE* get_file() const;

    sock_inet_tcp accept();

    static sock_inet_tcp connect(const address& a);
    static sock_inet_tcp listen(const address& a);

protected:
    sock_inet_tcp();
    sock_inet_tcp(int sfd);

    FILE* file;
};

////////////////////////////////////////////////////////////////////////////////

class exception_timeout : public std::exception { };

////////////////////////////////////////////////////////////////////////////////

#endif
